#include <head.h>
// pthread_join - 
/*
线程返回函数
void pthread_exit(void *retval);
 */

void * pthread_Func(void * arg)
{

    // 方式1 使用静态空间
#if 0
    static int retu_1 = 10;
    int * retu_1_p = &retu_1;

    return (void *)retu_1_p;
#elif 0
    // 方式2 使用动态空间
    int retu_2 = 10;
    int * retu_2_p = malloc(4);
    *retu_2_p = retu_2;

    printf("我是线程:data_p = %p\n" , retu_2_p);

    return (void *)retu_2_p;

#elif 1
    // 通过参数做返回值   比较鸡肋 适用于不需要向线程传递参数的场景  并且 主线程中 参数会被修改
    // 注意 使用这种方式 一定要向线程传参
    
    
    // 编写读取参数
    int * ptr = (int *)arg;


    // 返回的时候 借助参数
    *ptr = 10;
    return (void *)ptr;
#endif

}


int main(int argc, char const *argv[])
{
    // 创建线程

    pthread_t tid = 0;
    int data;
    if(pthread_create(&tid , NULL , pthread_Func , (void *)&data) != 0)
    {
        printf("线程创建失败\n");
        return 1;
    }

    // 回收 
    void * retu;
    pthread_join( tid , &retu);

    printf("我是进程:data_p = %p\n" , retu);
    printf("*((int *)retu) = %d\n" , *((int *)retu));
    printf("data = %d\n" , data);
    return 0;
}